home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 26 / AMIGAplus Sonderheft 26 (2000)(Falke)(DE)(Track 1 of 2)[!].iso / Tools / GFX-Viewer / SViewII / SvII-GL / sviewmesa.c < prev    next >
C/C++ Source or Header  |  1999-03-29  |  3KB  |  149 lines

  1. /*
  2. **      $VER: sviewmesa.c 1.00 (24.11.98)
  3. **
  4. **      SuperView output driver for AMesaRTL Shared Library
  5. **
  6. **      (C) Copyright 1998 Andreas R. Kleinert
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <stdio.h>
  13.  
  14. #include <proto/exec.h>
  15. #include <proto/dos.h>
  16. #include <proto/utility.h>
  17.  
  18. #include "gl/outputhandler.h"
  19.  
  20. AmigaMesaRTLContext ctx;
  21. struct Library *mesadriverBase;
  22.  
  23. __asm __saveds int InitOutputHandlerA(register __a0 AmigaMesaRTLContext mesacontext, register __a1 struct TagItem *tags)
  24. {
  25.  long mode;
  26.  
  27.  ctx = mesacontext;
  28.  
  29.  if (!(mesadriverBase = (struct Library *) GetTagData(OH_DriverBase,NULL,tags))) return(0);
  30.  
  31.  if(!stricmp(GetTagData(OH_OutputType,"",tags),"window"))
  32.     if (!GetTagData(OH_Output,0,tags)) return(0);
  33.  
  34.  AmigaMesaRTLGetContextAttr(AMRTL_Mode,mesacontext,&mode);
  35.  if(mode == AMRTL_RGBAMode)
  36.   {
  37.    /* init */
  38.  
  39.    return(1);
  40.   }
  41.  
  42.  DeleteOutputHandler();
  43.  
  44.  return(0);
  45. }
  46.  
  47. __asm __saveds void DeleteOutputHandler(void)
  48. {
  49. }
  50.  
  51. __asm __saveds int ResizeOutputHandler(void)
  52. {
  53.  return(1);
  54. }
  55.  
  56. ULONG width  = 640;
  57. ULONG height = 480;
  58.  
  59. __asm __saveds int ProcessOutput(void)
  60. {
  61.  UBYTE *src;
  62.  ULONG i, j;
  63.  BPTR  handle;
  64.  char name[64];
  65.  
  66.  if(!FindPort("SViewII.rx")) Execute("SViewII -OPEN_GUI", NULL, Output());
  67.  
  68.  AmigaMesaRTLGetContextAttr(AMRTL_Buffer,ctx,      &src);
  69.  AmigaMesaRTLGetContextAttr(AMRTL_BufferWidth,ctx, &width);
  70.  
  71.  sprintf(name, "VMEM:sviewmesa_%lx", &handle);
  72.  
  73.  handle = Open(name, MODE_NEWFILE);
  74.  if(handle)
  75.   {
  76.    UBYTE header[64];
  77.    UBYTE name2[64];
  78.  
  79.    sprintf(&header[0], "P6\n%ld %ld\n255\n", width, height);
  80.  
  81.    FWrite(handle, &header[0], strlen(header), 1);
  82.  
  83.    for(i=0; i<height; i++)
  84.     {
  85.      for(j=0; j<width; j++)
  86.       {
  87.        FWrite(handle, src, 3, 1);
  88.  
  89.        src += 4;
  90.       }
  91.     }
  92.  
  93.    Close(handle);
  94.  
  95.    sprintf(header, "/* */\naddress 'SViewII.rx'\n'LOAD=%s'\n", name);
  96.    sprintf(name2, "VMEM:sviewmesa_%lx", &handle + 1);
  97.  
  98.    handle = Open(name2, MODE_NEWFILE);
  99.    if(handle)
  100.     {
  101.      Write(handle, header, strlen(header));
  102.      Close(handle);
  103.     }
  104.  
  105.    sprintf(header, "rx %s", name2);
  106.  
  107.    if(!FindPort("SViewII.rx")) Delay(100);
  108.    if(!FindPort("SViewII.rx")) Delay(100);
  109.    if(!FindPort("SViewII.rx")) Delay(100);
  110.    if(!FindPort("SViewII.rx")) Delay(100);
  111.    if(!FindPort("SViewII.rx")) Delay(100);
  112.    if(!FindPort("SViewII.rx")) Delay(100);
  113.    if(!FindPort("SViewII.rx")) Delay(100);
  114.  
  115.    Execute(header, NULL, Output());
  116.  
  117.    DeleteFile(name);
  118.    DeleteFile(name2);
  119.  
  120.   }else return(0);
  121.  
  122.  return(1);
  123. }
  124.  
  125. __asm __saveds void SetIndexRGBTable(register __d0 int index, register __a0 ULONG *rgbtable, register __d1 int numcolours)
  126. {
  127. }
  128.  
  129. __asm __saveds ULONG SetOutputHandlerAttrsA(register __a0 struct TagItem *tags)
  130. {
  131.  return(0);
  132. }
  133.  
  134. __asm __saveds ULONG GetOutputHandlerAttr(register __d0 ULONG attr, register __a0 ULONG *data)
  135. {
  136.  switch(attr)
  137.   {
  138.    case OH_Width:  *data = width;  break;
  139.    case OH_Height: *data = height; break;
  140.    default:                        return(0);
  141.   }
  142.  
  143.  return(1);
  144. }
  145.  
  146. void __stdargs _XCEXIT(long dummy)
  147. {
  148. }
  149.